package com.chen.Dome4proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyUtil {
    // 代理工具，用于创建代理对象
    //创建一个明星对象的代理对象返回
    public static StarService createProxy(Star target) {
        /*
         * 参数1：代理对象的类加载器
         * 参数2：目标对象实现的接口类型
         * 参数3：代理对象和目标对象之间的处理器
         */
        StarService proxy=(StarService) Proxy.newProxyInstance(
                ProxyUtil.class.getClassLoader(),
                target.getClass().getInterfaces(),
                new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        //声明代理对象要做的事情
                        /*
                        参数一:代理对象
                        参数二:要调用的方法
                        参数三:方法参数
                         */
                        String methodName = method.getName();
                        if ("sing".equals(methodName)) {
                            System.out.println("代理对象在唱歌之前做准备");
                        } else if ("dance".equals(methodName)) {
                            System.out.println("代理对象在跳舞之前做准备");
                        }
                        Object result = method.invoke(target, args);
                        return result;
                    }
                });
                return proxy;
    }
    }


